package com.fuint.utils.syb;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import static com.fuint.utils.syb.SybPayUtils.getAppKey;
import static com.fuint.utils.syb.SybUtil.parseEntity;

/**
 * 云闪付 - 退款入参
 *
 * @author Tom
 * @since 2025-02-19
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SybYunRefundDTO implements SybBaseDTO {

    @JsonAlias("orgid")
    private String orgId;

    /**
     * 通联商户号
     */
    @JsonAlias("cusid")
    private String cusId;

    /**
     * 通联AppID
     */
    private String appid;

    /**
     * 版本号（默认11）
     */
    private String version;

    /**
     * 退款金额（单位为分）
     */
    @JsonAlias("trxamt")
    private String trxAmt;

    /**
     * 退款单号（重新生成）
     */
    @JsonAlias("reqsn")
    private String reqSn;

    /**
     * 下单时的交易订单号
     */
    @JsonAlias("oldreqsn")
    private String oldReqSn;

    /**
     * 原交易流水号
     * oldreqsn和oldtrxid必填其一
     */
    @JsonAlias("oldtrxid")
    private String oldTrxId;

    private String remark;

    /**
     * 优惠信息
     */
    private String benefitdetail;

    @JsonAlias("randomstr")
    private String randomStr;

    /**
     * 签名方式 RSA | SM2
     */
    @JsonAlias("signtype")
    private String signType;

    private String sign;

    public void init(String orgId, Long trxAmt, String refundSn, String oldReqSn, String cusId, String appId, String signKey) throws Exception {
        if (StrUtil.isNotEmpty(orgId)) {
            this.setOrgId(orgId);
        }
        this.setCusId(cusId);
        this.setAppid(appId);
        this.setVersion("11");
        this.setTrxAmt(String.valueOf(trxAmt));
        this.setReqSn(refundSn);
        this.setOldReqSn(oldReqSn);
        this.setRandomStr(String.valueOf(RandomUtil.randomInt(8)));
        this.setSignType(SybConstants.SIGN_TYPE);
        this.setSign(SybUtil.unionSign(parseEntity(this), signKey, SybConstants.SIGN_TYPE));
    }

}
